<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    //创建变量对象 因为是全局 的所有没有形参实参 只有函数 和变量

    // {
    //   // VO:

    // }
    // let age = 6
    // // let length
    // let person = {
    //   name: `jack`,
    //   fn: function cc() {
    //     console.log(11);
    //   }
    // }
    // // console.log(person.name);
    // // let a = "name"
    // // console.log(person["age"]);
    // // console.log(person[age]=1)//给person对象扩展age变量属性 
    // person[age]=1
    // // person["lenth"]=1
    // console.log(person);
    // // console.log(length);

    // console.log(person);
    // console.log(person.name);
    // //[""] []里面是属性名
    // //[] []里面是变量名
    // console.log(person["name"]);
    // // console.log(person[name]); //???
    // console.log(person.fn);
    // console.log(person["fn"]);
    // console.log(person[fn]); //????


    // let obj ={
    //   a:1,
    //   a:3
    // }
    // console.log(obj);


    // 对象. 操作符 点后面的属性 不会作为变量 而是作为key 直接设置给对象
    // 对象[] 操作符 [这里里面可以是变量，先解析变量得到值，在把值变为字符串，设置给对象当作属性名 ，设置给对象]
    // let frieng = "girlfrieng"
    // let person = {
    //   name: "xiaowang",
    //   say() {
    //     console.log(`hellow`);
    //   },
    //   // content-type:"/download/code/" //不行
    //   "content-type":"/download/code/" //行
    // }
    // console.log(`原来的`, person);
    // person.age = 18
    // person["high"] = `170cm`
    // person[frieng] = "女"
    // console.log(`新的`, person);
    // // person.content-type="/start/end" //不行
    // person["content-type"]="/start/end" //行


    // sdadasdas

    // ______________
    // console.log(1); //
    // new Promise((res, rej) => {
    //     console.log(2); //
    //     res();
    // }).then(() => {
    //     console.log(3); //
    //     Promise.resolve().then(() => {
    //         console.log(5);
    //         setTimeout(function () {
    //             console.log(6); //
    //             Promise.resolve().then(function () {
    //                 console.log(7);
    //             });
    //             setTimeout(function () {
    //                 console.log(8);
    //             }, 0);
    //         }, 0);
    //     });
    // }).then(() => {
    //     console.log(4);
    // });

    // new Promise((res) => {
    //     console.log(19); //
    //     setTimeout(() => {
    //         console.log(20); //
    //     }, 0);
    // });
    // Promise.resolve().then(() => {
    //     setTimeout(() => {
    //         Promise.resolve().then(() => {
    //             console.log(12);
    //         });
    //         console.log(13); //
    //     }, 0);
    // });
    // setTimeout(() => {
    //     console.log(9); //
    //     new Promise((res) => {
    //         res();
    //         console.log(10);
    //     }).then(() => {
    //         console.log(11);
    //     });
    // });
    // setTimeout(() => {
    //     setTimeout(() => {
    //         setTimeout(() => {
    //             Promise.resolve().then(() => {
    //                 console.log(14);
    //             });
    //             console.log(15);
    //         }, 0);
    //         console.log(16);
    //     }, 0);
    //     console.log(17); //
    // }, 0);

    // ________________

    //对象结构赋值
    // function axios ({url,method="get",params:{}}){
    //   console.log(url);
    //   console.log(method);
    // }

    // axios({url:"/user"})


    //交换变量
    // let a =1 
    // let b =2 
    // let c

    //  c=a
    // a=b
    // b=c

    // console.log(a); //2
    // console.log(b); //1


    // // 逻辑运算符 && ||
    // // 逻辑与（&&） A&&B
    //     // 1.先执行A语句,判断A语句的值转换成布尔值是true还是false
    //     // 2.如果为true，则执行B语句 ，返回B语句的返回值
    //     // 3.如果为false,直接返回A语句的返回值 ，不执行B语句 (一假则假)
    //     var b =3
    //     console.log(1&&2); // 先执行A语句 返回值为true 执行B语句 返回值 2
    //     console.log(true&&false); //先执行A语句 返回值为true 执行B语句 返回值 false
    //     console.log(false&&true);   //先执行A语句 返回值为false 返回值 false 不执行B语句 
    // // 逻辑与（||） A||B
    //     // 先执行A语句，判断A语句的值转换成布尔值是true还是false
    //     // 如果为true，则直接返回A语句的返回值 (一真则真)
    //     // 如果为false，执行B语句，且逻辑与（||）返回B语句的返回值
    //     console.log(1||2);
    //     console.log(b>5||"我是逻辑与的返回值");


    /* 
    5
    6
    2
    5
    */

    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    Person.prototype = {
        do() {
            console.log("study");
        }
    }
    function Child(name, age, gender) {
        Person.call(this, name, age, gender)
    }

    let cat1 = new Child("小王", 19, "male");
    console.log(cat1.name);


    //对象的继承
    function extend(obj1, obj2) {
        for (let attr in obj2) {
            obj1[attr] = obj2[attr];
        }
    }







</script>

</html>